home *** CD-ROM | disk | FTP | other *** search
- ; ctxtswc will do a contextswitch by changing stacks.
- ; the stack in use will be stored on the heap, and the
- ; new stack which is previously stored on the heap,
- ; will be loaded.
- .MODEL COMPACT
- .CODE
- EXTRN __stklen:word
- EXTRN _PREVIOUS:dword
- EXTRN _CURRENT:dword
- PUBLIC @ctxtswc$qv
- @ctxtswc$qv PROC NEAR
- push bp ; save bp
- mov cx,__stklen ; put nmbr of bytes
- sub cx,sp ; in cx
- les bx,dword ptr DGROUP:_PREVIOUS
- mov word ptr es:[bx+4],cx ; save sz of usedstk
- mov di,word ptr es:[bx+2] ; set adr for stk
- mov es,word ptr es:[bx] ; copy in di and es
- mov ax,ds ; save ds
- mov bx,ss ; set adr of stk in
- mov ds,bx ; ds
- mov si,sp ; and si
- rep movsb ; do copy
- mov ds,ax ; reset ds
- les bx,dword ptr DGROUP:_CURRENT
- mov cx,word ptr es:[bx+4] ; get sz of stk copy
- mov ax,ds ; save ds
- mov sp,__stklen
- sub sp,cx ; set stkPtr
- mov si,word ptr es:[bx+2] ; set adr of stored
- mov ds,word ptr es:[bx] ; stk in si and ds
- mov di,sp ; set dest for copy
- mov dx,ss ; di=stkPtr
- mov es,dx ; and es=stkSeg
- rep movsb ; do copy
- mov ds,ax ; reset ds
- pop bp ; reset bp
- ret
- @ctxtswc$qv ENDP
- END
-
-